입출력 인터페이스
IT 위키
더 많은 작업
- Input/Output Interface; I/O Interface
- CPU·주기억장치와 입출력 장치 사이에 놓여, 둘의 속도·데이터 형식·신호 방식 차이를 맞춰 데이터를 주고받게 하는 장치와 규약
입출력 장치는 CPU·주기억장치와 성질이 달라서 시스템 버스에 바로 붙일 수 없다. 그 차이를 메워 주는 것이 입출력 인터페이스다.
| 차이 | 내용 |
|---|---|
| 동작 속도 | 입출력 장치는 CPU보다 훨씬 느리다. 속도 차이를 버퍼로 흡수해야 CPU가 기다리며 낭비하지 않는다 |
| 데이터 형식 | 장치마다 쓰는 데이터 단위와 코드가 CPU의 워드 형식과 다르다. 직렬 장치는 비트 단위로, CPU는 워드 단위로 다룬다 |
| 신호 방식 | 전자기계식·광학식 장치는 신호의 종류와 전압 수준이 CPU·메모리의 전자 신호와 다르다 |
| 동작 방식 | 장치의 동작 모드와 타이밍이 제각각이라, 한 장치의 동작이 다른 장치를 방해하지 않도록 제어가 필요하다 |
| 구성 | 역할 |
|---|---|
| 데이터 레지스터 | 주고받을 데이터를 임시로 담는다 |
| 상태 레지스터 | 준비 완료·사용 중·오류 같은 장치 상태를 담는다 |
| 제어 레지스터 | CPU가 내린 명령과 동작 모드를 담는다 |
| 주소 해독기 | 입출력 주소를 해독해 해당 레지스터를 고른다 |
| 제어 회로 | 버스 신호와 장치 신호의 타이밍을 맞춘다 |
소프트웨어 쪽에서는 운영체제의 장치 드라이버가 이 레지스터들을 다뤄 장치를 제어한다.
- 고립형 입출력(Isolated I/O) — 입출력 장치가 메모리와 별도의 주소 공간을 쓰고, 전용 입출력 명령으로 접근한다
- 메모리 사상 입출력(Memory-mapped I/O) — 메모리 주소 공간 일부를 입출력 장치에 할당해, 메모리 접근 명령으로 장치를 다룬다
송신 장치와 수신 장치가 공통 클록 없이 데이터를 주고받을 때, 버스에 데이터가 실린 시점을 알리는 방법이 두 가지 있다.
| 구분 | 스트로브(Strobe) 제어 | 핸드셰이킹(Handshaking) |
|---|---|---|
| 제어선 | 하나 | 둘(데이터 유효, 데이터 수신) |
| 동작 | 송신 측(또는 수신 측)이 스트로브 펄스 하나를 보내 "지금 버스에 유효한 데이터가 있다"를 알린다 | 송신 측이 데이터 유효 신호를 올리면 수신 측이 받았다는 응답 신호를 돌려준다 |
| 시작하는 쪽 | 송신 장치나 수신 장치 어느 쪽이든 발생시킬 수 있다 | 송신 측 시작·수신 측 시작 모두 가능 |
| 수신 확인 | 없다. 송신 장치는 수신 장치가 데이터를 실제로 받아들였는지 알 수 없다 | 응답 신호로 받은 것을 확인한다 |
| 특징 | 단순하고 빠르지만 신뢰성이 낮다 | 신호가 하나 더 오가 느리지만 확실하다 |
핸드셰이킹은 스트로브 방식의 수신 확인 불가라는 약점을 보완하려고 응답선을 더한 것이다.
- 직렬 / 병렬 — 한 번에 1비트씩 보내는지(직렬 통신), 여러 비트를 동시에 보내는지
- 동기 / 비동기 — 공통 클록에 맞춰 보내는지, 시작·정지 신호나 핸드셰이킹으로 맞추는지